一個很小的線性迴歸,採用機器學習除了前幾篇的細節需要斟酌外。因為是線性迴歸問題只有少數幾個『超參數 Hyper-Parameter』的數值要由模型訓練師決定,我建議先在簡單的模型練習調整超參數,感受一下,等到複雜的模型比較容易有方向感。而複雜的模型例如 CNN 就會有諸如模型要多少層(多深?),要用多少神經單元,要用什麼Activation function(激勵函數)等等。不過不急,光是這裡要講的幾個超參數就夠傷腦筋的。
Moore 問 Fields 他在其他看到 Iteration,不是 UP 的 Iteration,與 epoch 關係為何?Fields 簡單用這個公式表達:
一個epoch 要跑 (訓練樣本數/Batch_Size)個 Iterations
因為一個 Iteration 是指一次用Batch_Size 個樣本做整個網路的導數計算來更新參數的。每個 epoch 要跑多少 iteration 是用上面公式換算來,所以基本上這個數字不需要調整。
batch_size = 10 #設 miniBatch 每個iteration以10筆做計算
lr = 0.03 #學習率 (Learning Rate)
num_epochs = 3 #總共要用全部的訓練樣本重複跑幾回合
大家看程式裡面關於這幾個超參數的設定值,Pete 馬上請教學習率為何設 0.03,這立即成為大家討論的重點,因為大家說不上一個所以然的道理。只能說大多數的模型被創造出來,其伴隨的就是也會找到一個建議值,Molly 特別講到這個算是很重要的課題,他請大家連到 Google 提供的 Machine Learning Crash Course 關於 Learning Rate 的實驗,是針對更簡單的線性迴歸 做訓練,儘管如此簡單的模型,學習率的超參數設定也是一番折騰。
佳麗在Learning Rate 的實驗 玩了好一會兒,越玩越是感慨:這個尋找合適的學習率,根本就是金髮姑娘原則。而且她也馬上觀察到如果是這樣的過程,理論上應該會有人發明 Learning Rate 要隨著訓練做調整,看來必須越來越小。
Molly 驚奇佳麗的敏感度:”的確是有的,我最近看 Adagrad ,就會在訓練過程中調整學習率,逐步變小”
另外 Cash 也觀察到要多少個 Epoch 也跟 Learning Rate 的設定是有關的,這個大家討論了一下,看來也只能觀察訓練的結果,看損失函數是否已經穩定不怎麼變化。不過又想到一個問題…如果聽聞很多問題是要訓練好幾天的,總不能一直盯著畫面看數字來決定要不要停止訓練。這個 Moore 使用 Tensorflow 看到有 Tensorboard 可以把訓練過程以曲線圖呈現,以後有機會看如何使用。
最後只剩下 Batch_Size,他們做了實驗,調整了 Batch_Size 10, 40, 100 大約得到幾個觀察:
專案緣起記錄在 【UP, Scrum 與 AI專案】